<?php

class ImportaCSVCandidato
{
	/**
	 * DATA_GERACAO [0]
	 * HORA_GERACAO [1]
	 * ANO_ELEICAO [2]
	 * NUM_TURNO [3]
	 * DESCRICAO_ELEICAO [4]
	 * SIGLA_UF [5]
	 * SIGLA_UE (Código da cidade no TSE ou UF do estado) [6]
	 * DESCRICAO_UE [7]
	 * CODIGO_CARGO [8]
	 * DESCRICAO_CARGO [9]
	 * NOME_CANDIDATO [10]
	 * SEQUENCIAL_CANDIDATO [11]
	 * NUMERO_CANDIDATO [12]
	 * NOME_URNA_CANDIDATO [13]
	 * COD_SITUACAO_CANDIDATURA [14]
	 * DES_SITUACAO_CANDIDATURA [15]
	 * NUMERO_PARTIDO [16]
	 * SIGLA_PARTIDO [17]
	 * NOME_PARTIDO [18]
	 * CODIGO_LEGENDA [19]
	 * SIGLA_LEGENDA [20]
	 * COMPOSICAO_LEGENDA [21]
	 * NOME_LEGENDA [22]
	 * CODIGO_OCUPACAO [23]
	 * DESCRICAO_OCUPACAO [24]
	 * DATA_NASCIMENTO [25]
	 * NUM_TITULO_ELEITORAL_CANDIDATO [26]
	 * IDADE_DATA_ELEICAO [27]
	 * CODIGO_SEXO [28]
	 * DESCRICAO_SEXO [29]
	 * COD_GRAU_INSTRUCAO [30]
	 * DESCRICAO_GRAU_INSTRUCAO [31]
	 * CODIGO_ESTADO_CIVIL [32]
	 * DESCRICAO_ESTADO_CIVIL [33]
	 * CODIGO_NACIONALIDADE [34]
	 * DESCRICAO_NACIONALIDADE [35]
	 * SIGLA_UF_NASCIMENTO [36]
	 * CODIGO_MUNICIPIO_NASCIMENTO [37]
	 * NOME_MUNICIPIO_NASCIMENTO [38]
	 * DESPESA_MAX_CAMPANHA [39]
	 * COD_SIT_TOT_TURNO [40]
	 * DESC_SIT_TOT_TURNO [41]
	 *
	 */
	public function importarDados($pathFile)
	{
		if (($handle = fopen($pathFile, 'r')) !== FALSE) {
			while (($data = fgetcsv($handle, 0, ';')) !== FALSE) {
				
				try {
					
					$anoEleicao = $data[2];
					$descricaoEleicao = $data[4];
					$descricaoCargo = $data[9];
					$numeroPartido = $data[16];
					$siglaPartido = $data[17];
					$nomePartido = $data[18];
					$nomeCandidato = $data[10];
					$numTituloEleitoralCandidato = $data[26];
					$descSituacaoCandidatura = $data[15];
					$descSituacaoTotTurno = $data[41];
					
					$siglaUF = $data[5];
					$siglaUE = $data[6];
					$descricaoUE = $data[7];
					
					$sequencialCandidato = $data[11];
					$numeroCandidato = $data[12];
					$nomeUrnaCandidato = $data[13];
				
					// Eleição
					$dataEleicao = array(
						'ano' => $anoEleicao,
						'descricao' => $descricaoEleicao
					);
					$eleicao = new Eleicao();
					if ($releicao = $eleicao->findByAno($dataEleicao['ano'])) {
						$eleicao_id = $releicao->getId();
					} else {
						$eleicao = new Eleicao($dataEleicao);
						$eleicao_id = $eleicao->save();
					}
					
					// Cargo
					$dataCargo = array(
						'descricao' => $descricaoCargo
					);
					$cargo = new Cargo();
					if ($rcargo = $cargo->findByDescricao($dataCargo['descricao'])) {
						$cargo_id = $rcargo->getId();
					} else {
						$cargo = new Cargo($dataCargo);
						$cargo_id = $cargo->save();
					}
					
					// Partido
					$dataPartido = array(
						'numero' => $numeroPartido,
						'sigla' => $siglaPartido,
						'nome' => $nomePartido
					);
					$partido = new Partido();
					if ($rpartido = $partido->findByNumeroAndSigla($dataPartido['numero'], $dataPartido['sigla'])) {
						$partido_id = $rpartido->getId();
					} else {
						$partido = new Partido($dataPartido);
						$partido_id = $partido->save();
					}
					
					// Político
					$dataPolitico = array(
						'nome' => $nomeCandidato,
						'documento' => $numTituloEleitoralCandidato
					);
					$politico = new Politico();
					if ($rpolitico = $politico->findByDocumento($dataPolitico['documento'])) {
						$politico_id = $rpolitico->getId();
					} else {
						$politico = new Politico($dataPolitico);
						$politico_id = $politico->save();
					}
					
					// Situação
					$dataSituacao = array(
						'descricao' => $descSituacaoCandidatura
					);
					$situacao = new Situacao();
					if ($rsituacao = $situacao->findByDescricao($dataSituacao['descricao'])) {
						$situacao_id = $rsituacao->getId();
					} else {
						$situacao = new Situacao($dataSituacao);
						$situacao_id = $situacao->save();
					}
					
					// Resultado
					$dataResultado = array(
						'descricao' => $descSituacaoTotTurno
					);
					$resultado = new Resultado();
					if ($rresultado = $resultado->findByDescricao($dataResultado['descricao'])) {
						$resultado_id = $rresultado->getId();
					} else {
						$resultado = new Resultado($dataResultado);
						$resultado_id = $resultado->save();
					}
					
					// Estado // Cidade
					$estado_id = null;
					$cidade_id = null;
					if ($siglaUF != 'BR') {
					
						$dataEstado = array(
							'sigla' => $siglaUF,
							'nome' => is_numeric($siglaUE) ? $siglaUF : $descricaoUE
						);
						$estado = new Estado();
						if ($restado = $estado->findBySigla($dataEstado['sigla'])) {
							$estado_id = $restado->getId();
						} else {
							$estado = new Estado($dataEstado);
							$estado_id = $estado->save();
						}
					
						if (is_numeric($siglaUE)) {
					
							$dataCidade = array(
								'nome' => $descricaoUE,
								'codigo' => $siglaUE,
								'estado_id' => $estado_id
							);
							$cidade = new Cidade();
							if ($rcidade = $cidade->findByNome($dataCidade['nome'], $dataCidade['estado_id'])) {
								$cidade_id = $rcidade->getId();
							} else {
								$cidade = new Cidade($dataCidade);
								$cidade_id = $cidade->save();
							}
							
							$estado_id = null;
						}
					}
					
					// Candidato
					$dataCandidato = array(
						'sequencial' => $sequencialCandidato,
						'numero' => $numeroCandidato,
						'nome' => $nomeUrnaCandidato,
						'eleicao_id' => $eleicao_id,
						'cargo_id' => $cargo_id,
						'partido_id' => $partido_id,
						'politico_id' => $politico_id,
						'situacao_id' => $situacao_id,
						'resultado_id' => $resultado_id,
						'estado_id' => $estado_id,
						'cidade_id' => $cidade_id
					);
					$candidato = new Candidato();
					$rcandidato = $candidato->findBySequencial($dataCandidato['sequencial'], $siglaUE, $dataCandidato['eleicao_id']);
					if (!$rcandidato) {
						$candidato = new Candidato($dataCandidato);
						$candidato->save();
					} else {
						$candidato = new Candidato(array('id' => $rcandidato->getId(), 'situacao_id' => $situacao_id, 'resultado_id' => $resultado_id));
						$candidato->save();
					}
				
				} catch (Exception $e) {
					$logger = Zend_Registry::get('logger');
					$logger->log($e->getMessage(), Zend_Log::INFO);
				}
			}
			fclose($handle);
		}
	}
	
	public function importarFotos(array $conditions = array())
	{
		$candidato = new Candidato();
	    $candidatos = $candidato->getCandidatos(array('candidato.foto IS ?' => new Zend_Db_Expr('NULL')) + $conditions);
	    	    
	    foreach ($candidatos as $c) {
	    	try {
		    	switch ($c['eleicao']) {
		    		case '2010':
		    			try {
		    				$client = new Zend_Http_Client(
		    					'http://divulgacand2010.tse.jus.br/divulgacand2010/jsp/abrirTelaDetalheCandidato.action',
		    					array('keepalive' => true)
							);
		    				$client->setParameterGet(array('sqCand' => $c['sequencial'], 'sgUe' => $c['ue']));
		    				$client->setCookieJar();
		    				$response = $client->request();
		    			
		    				if ($response->isError()) throw new Exception('Erro na conexão!');
		    				
		    				$uri = 'http://divulgacand2010.tse.jus.br/divulgacand2010/carregaFotoCandidatoServlet.do';
		    			
		    			} catch (Exception $e) {
		    				throw $e;
		    			}
		    			break;
		    		case '2012':
		    			$client = new Zend_Http_Client();
		    			$uri = 'http://divulgacand2012.tse.jus.br/divulgacand2012/mostrarFotoCandidato.action?sqCandidato='.$c['sequencial'].'&codigoMunicipio='.$c['ue'];
		    			break;
		    		case '2014':
		    			$client = new Zend_Http_Client();
		    			$uri = 'http://inter01.tse.jus.br/divulga-cand-2014/eleicao/2014/UF/'.$c['ue'].'/foto/'.$c['sequencial'].'.jpg';
		    			break;
		    		default:
		    			continue 2;
		    	}
		    	
		    	try {
		    		$client->setUri($uri);
		    		$response = $client->request();
		    	
		    		if ($response->isError()) throw new Exception('Erro na conexão!');
		    		
		    		$fname = md5(uniqid(rand(), true)) . '.png';
		    		
		    		$img = imagecreatefromstring($response->getBody());
		    		imagepng($img, 'fotos/' . $fname);
		    		imagedestroy($img);
		    		
		    		if (SON_Helper_Util::resizeImage('fotos/' . $fname, 161, 225) && SON_Helper_Util::resizeImage('fotos/' . $fname, 64, 96, 'fotos/thumb_' . $fname, 75)) {
		    			$candidato = new Candidato(array('id' => $c['id'], 'foto' => $fname));
		    			$candidato->save();
		    		}
		    	
		    	} catch (Exception $e) {
		    		throw $e;
		    	}
	    	} catch (Exception $e) {
	    		$logger = Zend_Registry::get('logger');
	    		$logger->log($e->getMessage(), Zend_Log::INFO);
		    }
	    }
	}
}